package com.icode.lock8;


import java.util.concurrent.TimeUnit;

/**
 * @Author: my_code
 * @Create: 2020-12-10 16:49
 *
 * Q:1-2
 * 会先打印“方法B”：
 *    因为两个线程都是同一个对象的对用方法，A线程执行methodA()时先拿到对象锁
 *   （即使A方法中有sleep()，也要等到methodA()方法执行结束才会执行B线程中的methodB()方法），
 *    A线程中同步方法执行结束后，释放锁，B线程才会执行
 */
public class Test1 {
    public static void main(String[] args) {
        Phone phone = new Phone();

        new Thread(()->{phone.methodA();}).start();

        //延时2秒 让线程先拿到锁
        try {TimeUnit.SECONDS.sleep(2);} catch (InterruptedException e) {e.printStackTrace();}

        new Thread(()->{phone.methodB();}).start();
    }


}
class Phone{

    public synchronized void methodA(){
        try {
            System.out.println("等待2秒");
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {e.printStackTrace();}
        System.out.println("方法A");
    }
    public synchronized void methodB(){
        System.out.println("方法B");
    }
}